###
# 各种Widget的使用方法汇总
###

import tkinter as tk
import tkinter.ttk as ttk

class App(tk.Tk):
    def __init__(self):
        super().__init__()
        self.title('My Label')
        self.geometry(f'960x720+50+30')
        self.configure(bg='blue')
        # self.resizable(False, False)
    
    def pack_use(self):
        self.label1 = tk.Label(self, text='Label1 long', background='lightyellow', relief='raised')
        self.label2 = tk.Label(self, text='Label2 long', background='lightgreen', relief='raised')
        self.label3 = tk.Label(self, text='Label3', background='lightblue', relief='raised')

        # 使用side参数指定排列方式，在这个方向放置空间
        # 使用padx/pady来设置组件与外部边界之间的距离
        # 使用ipadx/ipady来设置组件内文字与组件之间的距离
        self.label1.pack(side='left', fill='y') # 填满Y轴
        self.label3.pack(side='top', padx=50, fill='x') # 与X轴边界增加50
        self.label2.pack(side='top', pady=60, ipady=50, fill='x') # 与Y轴边界增加60

        # anchor参数可以指定组件东南西北的方位
        # expand参数表示默认是否填满空间
        self.label4 = tk.Label(self, text='Hello', background='lightgray', relief='raised', font='Times 10 bold')
        self.label4.pack(anchor='s', side='left')
        self.label5 = tk.Label(self, text='World', background='lightgray', relief='raised', font='Times 10 bold')
        self.label5.pack(anchor='s', side='left', padx=5, fill='both', expand=True)

        # 隐藏控件
        # self.label5.forget()
        # 恢复控件
        # self.label5.pack()

        # pack_slaves方法，获取所有控件对象
        for w in self.pack_slaves():
            print(f"控件文本是：{w.config('text')[4]}")



if __name__ == '__main__':
    app = App()
    
    app.pack_use()

    app.mainloop()